package Git2024_5_16;

public class MVC2 {
    /**
     * MVC
     * 软件架构的设计思想 目的为降低模块间的耦合度
     *
     * SpringMVC 对MVC思想的具体实现的框架
     *
     * 请求分类
     * 静态 .html文件存放位置->rebuild一下文件夹
     * 动态 创建类并标注@Controller 在方法上加上两个注解
     *
     * 关于请求与响应
     * 请求: 请求行 请求头 请求体
     * 响应: 响应行 响应头 响应体---状态码
     *
     * HTTP与HTTPS
     * HTTP 80
     * HTTPS 443---需要SSL证书认证
     *
     * 请求
     * 1 查询参数明文请求
     * 2 请求体请求 参数不会暴露在URL中
     *
     * 接收
     * 1 HttpServletRequest接收
     * 2 声明参数方式接收---参数数量少
     * 3 定义DTO类接收---参数数量多
     *
     * 项目开发流程
     * 需求文档-
     * -设计[ER图,UI设计]-
     * -前[页面]后端[功能]并行开发[后端开发时,是不能进行前端页面测试的]-
     * -前后端联调-
     * -测试[测试工程师]-部署上线-运行维护,更新迭代
     */
/*--------------------------------------------正课----------------------------------------------*/
    /**
     * 请求地址含义
     * /v1[版本1:version1]/users[业务模块:用户模块]/insert[业务功能:添加]
     */
    /**
     * 编写业务时 先梳理业务逻辑
     * --以注册功能为例--
     * 梳理业务逻辑,确定接口
     *   1.获取用户输入的数据
     *   2.校验用户输入的数据的合法性-借助框架校验
     *   3.校验用户名是否被占用[SELECT接口-MyBatis]
     *      3.1 被占用 提示用户名被占用
     *      3.2 未被占用 插入数据[INSERT接口],返回响应
     */
    /**
     * @Data 类级别注解-需要添加Lombok依赖
     * 主动为当前类创建Getter and Setter 和 ToString
     */
    /**注解优化:
     * 1.@RestController
     * 使用@RestController注解代替@Controller[类级别]和@ResponseBody[方法级别]
     * @RestController 类级别注解
     * 注解类型: 组合注解 即此注解相当于多个注解的组合 涵盖被组合注解的全部功能
     *
     * 2.使用@RequestMapping("/每个方法中请求地址相同部分")[类级别]优化@RequestMapping("/请求地址")[方法级别]中请求地址部份的重复部分
     * @RequestMapping 类级别,方法级别注解
     * 注意:
     *  若将该注解加在类上并给定了相同部分的路径 则表示该类中所有方法的路径都有该注解指定的部分路径
     *
     * 3.Mapper-Controller-xml之间为一一对应关系 每个Mapper接口类上都需要加@Mapper注解 需要优化 使用自动扫描功能:
     *   在工程文件下创建config包 用于自动扫描所有Mapper目录下的所有接口文件 并自动添加@Mapper注解
     * @Configuration 将当前类标识为配置类 在工程重启或加载时会优先加载
     * @MapperScan("指定自动扫描的目录的路径")
     *
     * @Configuration: 配置类
     * @MapperScan: 扫描mapper接口
     *  1.自动扫描指定的包下的mapper接口 并将其注册为Spring Bean
     *  2.添加此注解后 所有的mapper接口 都不需要添加@Mapper注解
     *
     * 注意 若要将扫描的类自动装入IoC容器并创建Bean对象则使用 @ComponentScan
     *     即不同的@\..Scan 注解标识的功能不同
     *
     */
    //小知识点
    /**
     * 注意
     * 1.xml文件放到mappers目录中时 需要设置namespace的值
     * 2.API文档: java开发工程师设计 用于与Web前端工程师交互
     * API文档包含:
     *  请求URL地址
     *  请求方法
     *  查询参数
     *  请求体数据
     *  返回响应..
     * .直接对接[后端开发]与[前端绘制与服务端交互的动态页面]的代码思路
     * .用于提升代码规范程度
     */
    /**
     * JSON
     * 一种数据传输格式
     *
     * 语法:
     *     {
     *      key:value,
     *      key:value,
     *         \..
     *     }
     *     {
     *         \..
     *     }
     * 在服务端与前端之间进行输出数据格式的转换
     *
     * 流程及必要性:
     * 客户端发送请求 -> 服务端接收数据 -> 服务端查询数据 -> 将查询结果组装成一个List集合
     * -> 将List集合传递给前端 此时前端拿到的List对象是java对象
     * -> 产生问题 前端语言[html,css,javascript等]与后端不同
     * -> 而前端需要将数据从对象中拿取并渲染到客户端界面上 若使用java对象 前端无法识别其中数据 无法使用数据
     * -> 需要将后端语言转化成一种更通用的数据格式---JSON
     * -> 前端接收JSON格式的数据 -> 获取数据 -> 渲染到客户端页面上
     *
     * 用途情景
     *      不同系统之间的数据转换
     *
     * JSON格式是由@ResponseBody注解转化
     *  @ResponseBody作用:
     *      1.允许数据以返回值的形式返回
     *      2.将java数据格式[对象]转换为json数据格式[字符串]
     */
    /**
     * Spring MVC执行流程
     * 组件
     * 1.DispatcherServlet 前端控制器(核心 用于协调各个模块)
     * 2.HandlerMapping 处理器映射器(存储了所有的URL地址对应的Controller方法的映射信息[集合])
     * 3.HandlerController 处理器控制器
     * 4.HandlerAdapter 处理器适配器(存储了所有的实现类 如基于注解方式实现的实现类 基于xml方式实现的实现类)
     * 5.ViewResolver 视图解析器
     *
     * [客户发送]请求
     * -> 前端控制器[接收请求]
     * -> 处理器映射器[根据请求地址查找Controller并生成执行链]
     * -> [将<URL对应的Controller>执行链返回给]前端控制器
     * -> 前端控制器[接收执行链]
     * -> 处理器适配器[查找具体实现类]
     * -> 处理器控制器{[执行对应实现类的方法] 返回[Model<Model:模型数据>AndView<View:视图文件名 决定了数据需要填充到哪个页面中>]给处理器适配器}
     * -> 前端控制器获取数据[ModelAndView]
     * -> 视图解析器[返回视图文件]
     * -> 前端控制器[将视图模型数据填充到页面中-对视图进行渲染]
     * -> [前端控制器将响应返回给]用户
     */
}
